/********************************
功  能：独立按键外部中断方式控制数码管显示
编程人：ZZT
版  本：V1.0
时  间：2023/12/22
**********************************/
#include <Reg51.h>
#include "display.h"
#include "delay.h"

unsigned int prameter = 0;

void EX0_Init(void);
void EX1_Init(void);
void Dis_Service();

/**********************************
函数名：main
功  能：完成程序模块的调用
参  数：无
返回值：无
***********************************/
void main()
{
	unsigned int i;
	EX0_Init();
	EX1_Init();
	EA = 1;
	for (i = 0; i < 2000; i++)
	{
		Display();	
	}
	while(1)
	{
		Dis_Service();
		Display();
	}
}

void Dis_Service()
{
	LEDBuff[0] = prameter / 1000;
	LEDBuff[1] = prameter / 100 % 10;
	LEDBuff[2] = prameter / 10 % 10;
	LEDBuff[3] = prameter % 10;
}

//外部中断0 初始化
void EX0_Init(void)
{
	IT0 = 1;//下降沿触发
	EX0 = 1;//允许中断
}

//外部中断1 初始化
void EX1_Init(void)
{
	IT1 = 1;//下降沿触发
	EX1 = 1;//允许中断
}

/************************************
1、中断服务函数一定是一个没有返回值的函数
2、中断服务函数一定是没有参数的函数
3、中断服务函数函数名后跟关键字 interrupt
4、interrupt n 0 - 4  5个中断源     8 * n + 0003H 
   0003H INT0 00BH T0 0013H INT1 001BH T1 0023H ES
5、中断服务函数不能被主程序或其他程序所调用
6、n 后面 跟 using m (0 - 3) 工作寄存器组
***************************************/
void EX0_ISR(void) interrupt 0
{
	DelayXms(10);
	if (INT0 == 0)
	{
		prameter++;
	    if (prameter > 9999)
			prameter = 0;
	}
}

void EX1_ISR(void) interrupt 2
{
	DelayXms(10);
	if (INT1 == 0)
	{
		prameter--;
		if (prameter > 9999)
			prameter = 9999;
	}
	
}